/*
 * Copyright 2010 Yuri Kanivets Licensed under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with the
 * License. You may obtain a copy of the License at
 * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law
 * or agreed to in writing, software distributed under the License is
 * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the specific language
 * governing permissions and limitations under the License.
 */

package com.easier.writepre.adapter;

/**
 * Numeric Wheel adapter.
 */
public class NumericWheelAdapter implements WheelAdapter
{

    /** The default min value */
    public static final int DEFAULT_MAX_VALUE = 9;

    /** The default max value */
    private static final int DEFAULT_MIN_VALUE = 0;

    // Values
    private int minValue;
    private int maxValue;

    // format
    private String format;

    /**
     * Default constructor
     */
    public NumericWheelAdapter()
    {
        this(DEFAULT_MIN_VALUE,
            DEFAULT_MAX_VALUE);
    }

    /**
     * Constructor
     * 
     * @param minValue the wheel min value
     * @param maxValue the wheel max value
     */
    public NumericWheelAdapter(int minValue, int maxValue)
    {
        this(minValue,
            maxValue,
            null);
    }

    /**
     * Constructor
     * 
     * @param minValue the wheel min value
     * @param maxValue the wheel max value
     * @param format the format string
     */
    public NumericWheelAdapter(int minValue, int maxValue, String format)
    {
        this.minValue = minValue;
        this.maxValue = maxValue;
        this.format = format;
    }

    @Override
    public String getItem(int index)
    {
        if (index >= 0 && index < getItemsCount())
        {
            int value = minValue + index;

            String temp = "";

            switch (value)
            {
                case 0:
                    temp = "00";
                    return format != null ? String.format(format,
                        value) : temp;
                    // break;
                case 1:
                    temp = "01";
                    return format != null ? String.format(format,
                        value) : temp;
                case 2:
                    temp = "02";
                    return format != null ? String.format(format,
                        value) : temp;
                case 3:
                    temp = "03";
                    return format != null ? String.format(format,
                        value) : temp;
                case 4:
                    temp = "04";
                    return format != null ? String.format(format,
                        value) : temp;
                case 5:
                    temp = "05";
                    return format != null ? String.format(format,
                        value) : temp;
                case 6:
                    temp = "06";
                    return format != null ? String.format(format,
                        value) : temp;
                case 7:
                    temp = "07";
                    return format != null ? String.format(format,
                        value) : temp;
                case 8:
                    temp = "08";
                    return format != null ? String.format(format,
                        value) : temp;
                case 9:
                    temp = "09";
                    return format != null ? String.format(format,
                        value) : temp;

                default:
                    break;
            }

            return format != null ? String.format(format,
                value) : Integer.toString(value);
        }
        return null;
    }

    @Override
    public int getItemsCount()
    {
        return maxValue - minValue + 1;
    }

    @Override
    public int getMaximumLength()
    {
        int max = Math.max(Math.abs(maxValue),
            Math.abs(minValue));
        int maxLen = Integer.toString(max).length();
        if (minValue < 0)
        {
            maxLen++;
        }
        return maxLen;
    }
}
